package cn.edik.utils.kit;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 * Created by Edik on 2017/6/2.
 */
public class DateKit {


    /**
     * 获取当前日期
     *
     * @return yyyy-MM-dd HH:mm:ss
     */
    public static String getDate() {
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
    }

    /**
     * 格式化日期
     *
     * @param date
     * @return yyyy-MM-dd HH:mm:ss
     */
    public static String getDate(Date date) {
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
    }

    /**
     * 获取当前年份
     *
     * @return 2018
     */
    public static String getYear() {
        Calendar now = Calendar.getInstance();
        return now.get(Calendar.YEAR) + "";
    }

    /**
     * 获取当前月份
     *
     * @return 1 2 3 4 10 ..
     */
    public static String getMonth() {
        Calendar now = Calendar.getInstance();
        return (now.get(Calendar.MONTH) + 1) + "";
    }

    /**
     * 获取当前月份（二位数）
     *
     * @return 01 02 03 10 ...
     */
    public static String getMonthForTwo() {
        Calendar now = Calendar.getInstance();
        int month = (now.get(Calendar.MONTH) + 1);
        return month < 10 ? "0" + month : "" + month;
    }

    /**
     * 获取当前日
     *
     * @return 1 .. 10 ... 30 ...
     */
    public static String getDay() {
        Calendar now = Calendar.getInstance();
        return now.get(Calendar.DAY_OF_MONTH) + "";
    }

    /**
     * 获取当前日（int类型）
     *
     * @return
     */
    public static int getDayForInt() {
        Calendar now = Calendar.getInstance();
        return now.get(Calendar.DAY_OF_MONTH);
    }

    /**
     * 获取昨天的日期
     *
     * @return yyyy-MM-dd
     */
    public static String getYestday() {
        Date date = new Date();//取时间
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(calendar.DATE, -1);//把日期往后增加一天.整数往后推,负数往前移动
        date = calendar.getTime(); //这个时间就是日期往后推一天的结果
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String dateString = formatter.format(date);

        return dateString;
    }

    /**
     * 获取之前或之后某天的日期
     *
     * @param date   日期基数
     * @param type   YEAR MONTH DATE
     * @param amount 整数往后推,负数往前移动
     * @return
     */
    public static Date getDate(Date date, String type, int amount) {
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        if ("YEAR".equals(type)) {
            calendar.add(calendar.YEAR, amount);//把日期往后增加一年.整数往后推,负数往前移动
        } else if ("MONTH".equals(type)) {
            calendar.add(calendar.MONTH, amount);//把日期往后增加一个月.整数往后推,负数往前移动
        } else if ("DATE".equals(type)) {
            calendar.add(calendar.DATE, amount);//把日期往后增加一天.整数往后推,负数往前移动
        }

        return calendar.getTime();
    }

    public static String timestampToDate(long timestamp) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        if (String.valueOf(timestamp).length() == 10) timestamp = (timestamp * 1000L);
        Date date = new Date(timestamp);
        return simpleDateFormat.format(date);
    }

    public static void main(String[] args) {
        Date date = new Date();//取时间

        System.out.println(getDate(date));
        System.out.println(getDate(getDate(date, "MONTH", 2)));


//
//        Calendar calendar = new GregorianCalendar();
//        calendar.setTime(date);
//
//        //calendar.add(calendar.YEAR, 1);//把日期往后增加一年.整数往后推,负数往前移动
//
//        //calendar.add(calendar.DAY_OF_MONTH, 1);//把日期往后增加一天.整数往后推,负数往前移动
//
//        //calendar.add(calendar.DATE, 1);//把日期往后增加一天.整数往后推,负数往前移动
//
//        //calendar.add(calendar.WEEK_OF_MONTH, 1);//把日期往后增加一星期.整数往后推,负数往前移动
//
//        //calendar.add(calendar.MONTH, 1);//把日期往后增加一个月.整数往后推,负数往前移动
//
//        date = calendar.getTime();   //这个时间就是日期往后推一天的结果
//
//        System.out.println(getDate(date));
    }
}
